package com.baidu.mpks.usergroup.dao;

import com.baidu.mpks.usergroup.domain.UserGroup;
import com.baidu.mpks.usergroup.dto.Resources;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

public interface UserGroupDao {

    int addGroup(UserGroup userGroup);

    int updateGroup(UserGroup userGroup);

    UserGroup getRootGroupByType(@Param("type") String type);

    List<UserGroup> getGroupsByParentId(@Param("parentId") Integer parentId);

    List<UserGroup> getGroupsByUserId(@Param("userId") String userId);

    List<UserGroup> getGroupsByUserIdAndGroupType(@Param("userId") String userId, @Param("type") String groupType);

    Set<UserGroup> getGroupsByUserIdsAndGroupType(@Param("userIds") List<String> userId, @Param("type") String groupType);

    void addUsersByGroupId(@Param("id") Integer groupId, @Param("userIds") List<String> userIds);

    void removeUsersByGroupId(@Param("id") Integer groupId, @Param("userIds") List<String> userIds);

    void removeUsersByType(@Param("type") String type, @Param("userIds") List<String> userIds);

    Set<String> getUserIdsByGroupId(@Param("id") Integer groupId, @Param("offset") Integer offset, @Param("pageSize") Integer pageSize);

    Integer getUserIdsByGroupIdCount(@Param("id") Integer groupId);

    UserGroup getGroupById(@Param("id") Integer id);

    List<UserGroup> getAllGroup();

    List<UserGroup> getGroupByRoleId(@Param("roleId") Integer roleId);

    UserGroup getGroupByNameAndType(@Param("name") String name, @Param("type") String type);

    List<UserGroup> getGroupByLikeNameAndType(@Param("name") String name, @Param("type") String type);

    void addResourcesByGroupId(@Param("id") Integer groupId, @Param("type") String type, @Param("resources") List<Resources> resources);

    void removeResourcesByGroupIdAndResourceId(@Param("id") Integer groupId, @Param("type") String type, @Param("resourceIds") List<Integer> resourceIds);

    void removeResourcesByGroupIdAndResourceName(@Param("id") Integer groupId, @Param("type") String type, @Param("resourceNames") List<String> resourceNames);

    void removeResourcesByGroupId(@Param("id") Integer groupId);

    void removeResourcesByGroupIdAndType(@Param("id") Integer groupId, @Param("type") String type);

    List<Resources> getResourcesByGroup(@Param("id") Integer groupId, @Param("type") String type);

    void addRolesByGroupId(@Param("id") Integer groupId, @Param("roles") List<Resources> roles);

    void removeRolesByGroupIdAndRoleId(@Param("id") Integer groupId, @Param("roleIds") List<Integer> roleIds);

    void removeRolesByGroupId(@Param("id") Integer groupId);

    List<Resources> getRolesByGroup(@Param("id") Integer groupId);

    void deleteById(@Param("id") Integer id);

    void removeUserByUserId(@Param("userId") String userId);

    void addGroupForAvic(UserGroup userGroup);
}
